package com.atguigu.gulimall.order.vo;

import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 订单确认页
 *
 * @author LaiSanShan
 * @date 2021-08-31
 */
public class OrderConfirmVo {

    // 收货地址列表
    @Getter
    @Setter
    private List<MemberAddressVo> address;

    // 所有选中的购物项
    @Getter
    @Setter
    private List<OrderItemVo> items;

    // 是否有库存
    @Getter
    @Setter
    Map<Long, Boolean> stocks;

    // 商品总数
    public Integer getCount() {
        return items.stream().map(OrderItemVo::getCount).reduce(0, (a, b) -> a + b);
    }

    // 会员级分
    @Getter
    @Setter
    private Integer integration;

    // 订单总额
    private BigDecimal total;

    /**
     * 自定义get总额逻辑
     *
     * @return 订单总额
     */
    public BigDecimal getTotal() {
        return items.stream().map(OrderItemVo::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    public void setTotal(BigDecimal total) {
        this.total = total;
    }

    // 应付价格
    private BigDecimal payPrice;

    /**
     * 没有优惠参与，直接使用订单总额
     *
     * @return 应付价格
     */
    public BigDecimal getPayPrice() {
        return items.stream().map(OrderItemVo::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    public void setPayPrice(BigDecimal payPrice) {
        this.payPrice = payPrice;
    }

    // 订单防重令牌
    @Getter
    @Setter
    private String orderToken;

}
